<template>
  <div>
    <!-- data:展示数据

      props:配置选项

      node-click:节点被点击时的回调
      共三个参数，依次为：
      1.传递给 data 属性的数组中该节点所对应的对象
      2.节点对应的 Node
      3.节点组件本身

      show-checkbox 节点是否可被选择

      check-change 节点选中状态发生变化时的回调
      共三个参数，依次为:
      1.传递给 data 属性的数组中该节点所对应的对象
      2.节点本身是否被选中
    3.节点的子树中是否有被选中的节点-->
    <h1>可选择功能操作演示案例</h1>
    <el-tree
      :props="props"
      :load="loadNode"
      lazy
      show-checkbox
      @node-click="handleNodeClick"
      @check-change="handleCheckChange"
    ></el-tree>
  </div>
</template>

<script>
export default {
  data() {
    return {
      props: {
        label: "name",
        children: "zones"
      },
      count: 1
    };
  },
  methods: {
    handleNodeClick(data, a, b) {
      console.log(data, a, b);
      // data:传递给 data 属性的数组中该节点所对应的对象
      // a: 节点对应的 Node Node {...}
      // b: VueComponent{...}
    },
    handleCheckChange(data, check, indeterminate) {
      console.log(data, check, indeterminate);
      // 传递给 data 属性的数组中该节点所对应的对象
      // 节点本身是否被选中
      // 节点的子树中是否有被选中的节点
    },
    loadNode(node, resolve) {
      if (node.level === 0) {
        return resolve([{ name: "region1" }, { name: "region2" }]);
      }
      if (node.level > 3) {
        return resolve([]);
      }
      var hasChild;
      if (node.data.name === "region1") {
        hasChild = true;
      } else if (node.data.name === "region2") {
        hasChild = false;
      } else {
        hasChild = Math.random() > 0.5;
      }
      setTimeout(() => {
        var data;
        if (hasChild) {
          data = [
            {
              name: "zone" + this.count++
            },
            {
              name: "zone" + this.count++
            }
          ];
        } else {
          data = [];
        }
        resolve(data);
      }, 500);
    }
  }
};
</script>

<style>
</style>
